package com.wnxy.sddfp.common;

import cn.hutool.jwt.JWTUtil;
import cn.hutool.jwt.signers.JWTSigner;
import cn.hutool.jwt.signers.JWTSignerUtil;
import org.springframework.core.io.ClassPathResource;
import org.springframework.security.rsa.crypto.KeyStoreKeyFactory;

import java.security.KeyPair;
import java.util.HashMap;
import java.util.Map;

/**
 * @author yellow Docter
 * @date 2024 -04-15
 * @desc
 *
 */
public class Main {
    /**
     *  1、准备载荷:
     *
     *      Map<String, Object> payload = new HashMap<>();
     *      payload.put("userId",100);
     *
     * 2、 String token = JWTUtil.createToken(payload, signer);
     * 3、 boolean verify = JWTUtil.verify(token, signer);
     * 4、 解析token
     *
     * @param args
     */
    public static void main(String[] args) {
        Map<String, Object> payload = new HashMap<>();
        payload.put("userId",100);

        // 创建密钥对工厂，加载证书文件，指定证书文件访问密码
        KeyStoreKeyFactory factory =
                new KeyStoreKeyFactory(new ClassPathResource("sdd.jks"),"123456".toCharArray());

        // 获取RSA加密的密钥对
        KeyPair keyPair = factory.getKeyPair("sdd");

        // 签名器
        JWTSigner signer = JWTSignerUtil.createSigner("RSA",keyPair);

        // 【生成token】
        // 直接 给载荷  (header 不用给 默认加密算法就可以)
        // 证书加密   加载证书文件 需要sdd.jks
//        String token = JWTUtil.createToken(payload, signer);

        // 密匙加密
        String token = JWTUtil.createToken(payload, "1234".getBytes());
        System.out.println("token = " + token);

        // 【校验token】
        boolean verify = JWTUtil.verify(token, signer);

        // 【解析token】
        if (verify) {
            Number userId = (Number) JWTUtil.parseToken(token).getPayload("userId");
            System.out.println("userId = " + userId);
        }
    }

}
